//
//  SHEmoticonTools.swift
//  SHWeibo3
//
//  Created by teacher on 16/7/29.
//  Copyright © 2016年 teacher. All rights reserved.
//

import UIKit
// 最大行数
let SHEmoticonMaxRow = 3
// 最大列数
let SHEmoticonMaxCol = 7
// 最多表情数
let SHEmoticonMaxCount = SHEmoticonMaxRow*SHEmoticonMaxCol - 1

class SHEmoticonTools: NSObject {
    // 全局访问点
    static let sharedTools: SHEmoticonTools = SHEmoticonTools()
    
    //emoticon bundle文件
    lazy var emoticonBundle: NSBundle = {
        // 路径
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        // emoticon bundle文件
        return NSBundle(path: path)!
    }()
    
    // emoticon三维数组
    lazy var allEmoticons:[[[SHEmoticon]]] = {
        return [
            self.getEmoticonsGroup(self.defaultEmoticons),
            self.getEmoticonsGroup(self.emojiEmoticons),
            self.getEmoticonsGroup(self.lxhEmoticons)
        ]
    }()

    // 默认表情
    lazy var defaultEmoticons:[SHEmoticon] = {
        return self.getEmoticons("default/")
    }()
    
    // emoji表情
    lazy var emojiEmoticons:[SHEmoticon] = {
        return self.getEmoticons("emoji/")
    }()
    
    // 浪小花表情
    lazy var lxhEmoticons:[SHEmoticon] = {
        return self.getEmoticons("lxh/")
    }()

    /*
        二维数组分析
        默认表情 108
        emoji  80
        浪小花  40
    
        通过一维数组 得到二位数组
        默认表情(6页)
        [[20],[20],[20],[20],[20],[8]]
        [0,19] [20,39] [40,59] .....
        emoji(4页)
        [[20],[20],[20],[20]]
        浪小花（2页）
        [[20],[20]]
    */
    // 一维数组转二维数组
    func getEmoticonsGroup(emoticons:[SHEmoticon]) -> [[SHEmoticon]]{
        // 计算页数
        let pageCount = (emoticons.count + SHEmoticonMaxCount - 1)/SHEmoticonMaxCount
        
        // 定义一个临时可变二维数组
        var tempArray:[[SHEmoticon]] = [[SHEmoticon]]()
        // 遍历页数
        for i in 0..<pageCount {
            // 位置
            let location = SHEmoticonMaxCount * i
            // 长度
            var length = SHEmoticonMaxCount
            // 因为默认表情为108  会导致越界  需要计算
            if location + length > emoticons.count {
                length = emoticons.count - location
            }
            // range
            let range = NSRange(location: location, length: length)
            // 截取后的一维数组
            let array = (emoticons as NSArray).subarrayWithRange(range) as![SHEmoticon]
            // 保存数组
            tempArray.append(array)
        }
        return tempArray

    }

    // 通过读取plist文件 获取一维数组
    func getEmoticons(name: String) -> [SHEmoticon]{
        // 路径
        let file = emoticonBundle.pathForResource("\(name)info.plist", ofType: nil)!
        // plist文件转数组
        let array = NSArray(contentsOfFile: file)!
        // 创建一个临时可变数组
        var tempArray:[SHEmoticon] = [SHEmoticon]()
        // 遍历数组 字典转模型
        for dic in array {
            // 创建一个模型
            let emoticon = SHEmoticon(dict: dic as! [String: AnyObject])
            emoticon.path = "\(name)\(emoticon.png ?? "")"
            // 保存模型
            tempArray.append(emoticon)
        }
        return tempArray
    }
    // 传入图片名称得到对应的模型
    func searchEmoticons(chs: String?) -> SHEmoticon? {
        
        // 遍历默认表情数组
        for emoticon in defaultEmoticons {
            // 判断是否相同
            if emoticon.chs == chs{
                return emoticon
            }
        }
        // 遍历浪小花表情数组
        for emoticon in lxhEmoticons {
            if emoticon.chs == chs {
                return emoticon
            }
        }
        
        return nil
        
    }
}









